// admin/system/service/sys_job_service.go
package service

import (
	"errors"
	repo "go-admin1/admin/system/dao"
	"go-admin1/admin/system/model"
)

// SysJobService 定时任务服务接口
type SysJobService interface {
	Create(job *model.SysJob) error
	GetByID(id int64) (*model.SysJob, error)
	Update(job *model.SysJob) error
	Delete(id int64) error
	List(page, pageSize int) ([]*model.SysJob, int64, error)
	ListAll() ([]*model.SysJob, error)
	ListByStatus(status string) ([]*model.SysJob, error)
}

type sysJobService struct {
	jobDao repo.SysJobDao
}

func (s sysJobService) Create(job *model.SysJob) error {
	return s.jobDao.Create(job)
}

func (s sysJobService) GetByID(id int64) (*model.SysJob, error) {
	job, err := s.jobDao.GetByID(id)
	if err != nil {
		return nil, err
	}
	return job, nil
}

func (s sysJobService) Update(job *model.SysJob) error {
	existingJob, err := s.jobDao.GetByID(job.JobID)
	if err != nil {
		return err
	}
	if existingJob == nil {
		return errors.New("定时任务不存在")
	}

	return s.jobDao.Update(job)
}

func (s sysJobService) Delete(id int64) error {
	existingJob, err := s.jobDao.GetByID(id)
	if err != nil {
		return err
	}
	if existingJob == nil {
		return errors.New("定时任务不存在")
	}

	return s.jobDao.Delete(id)
}

func (s sysJobService) List(page, pageSize int) ([]*model.SysJob, int64, error) {
	jobs, total, err := s.jobDao.List(page, pageSize)
	if err != nil {
		return nil, 0, err
	}
	return jobs, total, nil
}

func (s sysJobService) ListAll() ([]*model.SysJob, error) {
	jobs, err := s.jobDao.ListAll()
	if err != nil {
		return nil, err
	}
	return jobs, nil
}

func (s sysJobService) ListByStatus(status string) ([]*model.SysJob, error) {
	jobs, err := s.jobDao.ListByStatus(status)
	if err != nil {
		return nil, err
	}
	return jobs, nil
}

// NewSysJobService 创建定时任务服务实例
func NewSysJobService() SysJobService {
	return &sysJobService{
		jobDao: repo.NewSysJobDao(),
	}
}
